﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HAMath
{
   /// <summary>
   /// 两个平面直角坐标系的转换
   /// </summary>
    public class Change2DCartesianCoordinateSystem
    {
       /// <summary>
        /// 两个平面直角坐标系的转换      取得在坐标系1中的点A在坐标系2中的坐标值
       /// </summary>
       /// <param name="x1">观测点在坐标系 1 中的坐标</param>
        /// <param name="y1">观测点在坐标系 1 中的坐标</param>
       /// <param name="xO2">坐标系 2 的原点在坐标系 1 中的坐标</param>
        /// <param name="yO2">坐标系 2 的原点在坐标系 1 中的坐标</param>
       /// <param name="rotateZ">坐标系 1 旋转到 坐标系 2 的角度  </param>
       /// <returns></returns>
        public static Point2D GetPointInCS1ToCS2(double x1,double y1,double xO2,double yO2,double rotateZ)
        {
            Point2D point2d = new Point2D();


            try
            {
                double nX;//观测点在坐标系 2 的坐标
                double nY;

                //求  nX  nY 的过程采用 先平移坐标系 后旋转坐标系的过程  当然也可以先旋转在平移  结果是一样的
                nX = (x1 - xO2) * Math.Cos(rotateZ /180.0*Math.PI )+(y1-yO2 )*Math.Sin(rotateZ /180.0*Math.PI );
                nY =-(x1-xO2 )*Math.Sin (rotateZ /180.0*Math.PI )+(y1-yO2 )*Math.Cos (rotateZ /180.0*Math .PI );

                point2d.X = nX;
                point2d.Y = nY;

                return point2d;

            }
            catch
            {
               
                return null;
            }




        }







    }
}
